/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"B6639852-B07C-4343-B34F-B24405D9EB5F",variableType:8}
 */
var $aux_viajes_propios = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"E2758259-85C8-4352-8696-103E5E08C978",variableType:8}
 */
var $aux_viajes_terceros = null;

/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"DE11DBB5-F240-48A8-90C2-3B657D77933A"}
 * @AllowToRunInFind
 */
function continuar(event) 
{	
	elements.errores.removeAllTabs()
	var res = globals.chequeaVariables()
	if (res[0] == 1)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Error en variables globales : '+res[1],'OK')
		return
	}

	var $tipo_asiento = 4
	if (globals.control_asientos_prov($tipo_asiento,globals.gMesAsientos,globals.gAnioAsientos) == 0 )
	{
		return
	}
	
	// DEFINE FOUNDSETs
	/** @type {JSFoundSet<db:/contable/asiento_prov_cab>} */
	var $provisorio = databaseManager.getFoundSet('contable','asiento_prov_cab')
	/** @type {JSFoundSet<db:/infocom/ctacte_cl>} */
	var $cta_cte 	= databaseManager.getFoundSet('infocom','ctacte_cl')
	/** @type {JSFoundSet<db:/infocom/fac_cabecera>} */
	var $faccab 	= databaseManager.getFoundSet('infocom','fac_cabecera')
	var $cols		= ['fecha','documento','error']
	var $errores 	= databaseManager.createEmptyDataSet( 0, $cols )
	
	// BUSCAR en CTACTE
	if ($cta_cte.find()== false)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Ocurrió un error al buscar movimientos','OK')
		return
	}

	var $fecha_desde 	= new Date(globals.gAnioAsientos, globals.gMesAsientos-1,1,0,0,0,0)
	var $fecha_hasta 	= new Date(globals.gAnioAsientos, globals.gMesAsientos,0,23,59,59,996)
	var rango 			= utils.dateFormat($fecha_desde,'dd-MM-yyyy') + '...'+ utils.dateFormat($fecha_hasta,'dd-MM-yyyy')
	$cta_cte.fecha_mov 	= '#' + rango + '|dd-MM-yyyy'
	$cta_cte.ctacte_cl_to_tab_mov_cl_copia.diario_ventas = 1
	
	if ($cta_cte.search() == 0)
	{
		globals.DIALOGS.showWarningDialog('Aviso','No se encontraron movimientos en cta.cte. con esas condiciones','OK')
		return
	}
	databaseManager.setAutoSave(false)
	// POR cada CTACTE
	var $cant = databaseManager.getFoundSetCount($cta_cte)
	for (var i = 1 ; i <= $cant ; i++)
	{
		var $rcd = $cta_cte.getRecord(i)
		if ($rcd.importe != 0) //no generar cabecera en cero sin detalle
		{
			// ESTO es para tener la descripcion del mov. de ctacte si molesta se saca
			var comprob = 'Código ' + $rcd.cod_mov 
			if ($rcd.ctacte_cl_to_tab_mov_cl_copia.getSize() > 0)
				comprob = $rcd.ctacte_cl_to_tab_mov_cl_copia.descripcion;
				
			// BUSCAR en FACTURAS lo correspondiente a CTACTE
			if ($faccab.find() == false) 
			{
				globals.DIALOGS.showWarningDialog('Aviso','Ocurrió un error al buscar facturas','OK') 
				return 
			}
			$faccab.letra 		= $rcd.letra
			$faccab.sucursal	= $rcd.sucursal
			$faccab.nro_factura	= $rcd.nro_factura
			var found = $faccab.search()
			var error
			// ENCONTRAR solo UNO en fac_cabecera, informar error
			if (found == 0)
			{
				error = new Array(utils.dateFormat($rcd.fecha_mov,'dd-MM-yyyy'), $rcd.letra + '-'+$rcd.sucursal+'-'+$rcd.nro_factura , 'Error en cabecera ' + comprob + ' = No existe')
				$errores.addRow(error)
			}
			if (found > 1)
			{
				error = new Array(utils.dateFormat($rcd.fecha_mov,'dd-MM-yyyy'), $rcd.letra + '-'+$rcd.sucursal+'-'+$rcd.nro_factura , 'Error en cabecera ' + comprob + ' = Hay más de una cabecera')
				$errores.addRow(error)
			}
			
			// RECORRER RENGLONES de la factura
			$aux_viajes_terceros=0
			$aux_viajes_propios=0
			var $cant_1 = databaseManager.getFoundSetCount($faccab.fac_cabecera_to_fac_detalle) 
			for (var j = 1 ; j <= $cant_1 ; j++)
			{
				//var $rcd_fac = $faccab.getRecord(j)
				$faccab.fac_cabecera_to_fac_detalle.setSelectedIndex(j)
				if($faccab.fac_cabecera_to_fac_detalle.viaje_id !== null) 
				{
					if($faccab.fac_cabecera_to_fac_detalle.fac_detalle_to_viajes.viaje_propio != 1)
						$aux_viajes_terceros += $faccab.fac_cabecera_to_fac_detalle.total_renglon
				} 
				else	// cuando no tiene viaje suma a terceror
					$aux_viajes_terceros += $faccab.fac_cabecera_to_fac_detalle.total_renglon
			}
			// total viajes propios sale por diferencia
			if ($rcd.neto == 0)  // hay movs de ctacte con neto en cero
			{
				var dife = $rcd.importe - $rcd.iva
				$aux_viajes_propios = dife -$aux_viajes_terceros
			}
			else
				$aux_viajes_propios = $rcd.neto - $aux_viajes_terceros 
			if ($aux_viajes_propios < 0 )  // si menor a cero avisa
			{
				error = new Array(utils.dateFormat($rcd.fecha_mov,'dd-MM-yyyy'),comprob + ' ' + $rcd.letra + '-'+$rcd.sucursal+'-'+$rcd.nro_factura, 'Dif. negativa en viajes propios')
				$errores.addRow(error)	
			}
			
			//  GRABA  ASIENTO PROVISORIO			
			tipoAsiento_4($rcd , $provisorio,comprob,$errores, $tipo_asiento)		
		} //fin del if importe=0
	} // fin for de CTACTE
	if ($errores.getMaxRowIndex() > 0)
	{
		var $fecha_hoy 	= utils.dateFormat(new Date(),'dd-MM-yyyy')
		var $periodo	= 'Desde ' + utils.dateFormat($fecha_desde,'dd-MM-yyyy') + ' hasta '  + utils.dateFormat($fecha_hasta,'dd-MM-yyyy')
		var $titulo		= 'Asiento Ventas - ' + $periodo + ' - Fecha Proceso ' + $fecha_hoy
		globals.crearFormErrores('asiento_ventas_4',$errores,$cols,$titulo)
	}
	databaseManager.startTransaction()
	if (databaseManager.saveData()) 
	{
		databaseManager.setAutoSave(true)
		databaseManager.commitTransaction()
	}
	else
	{
		databaseManager.rollbackTransaction()
		globals.DIALOGS.showWarningDialog('Aviso','Ocurrió un error al intentar grabar los cambios. El proceso está incompleto','OK')
	}
}

/**
 * @param {JSRecord<db:/infocom/ctacte_cl>} $rcd
 * @param {JSFoundSet<db:/contable/asiento_prov_cab>} $provisorio
 * @param {String} $texto
 * @param {JSDataSet} $errores
 * @param {Number} $tipo_asiento
 * 
 * @properties={typeid:24,uuid:"38035C7F-5E0B-4852-BFCD-06C7E6EC4338"}
 */
function tipoAsiento_4($rcd,$provisorio,$texto,$errores, $tipo_asiento)
{	
	// CABECERA ASIENTO
	$provisorio.newRecord()
	
	$provisorio.moneda 				= 'P'
	$provisorio.moneda_carga 		= 1  
	$provisorio.hizo 				= globals.gUsuarioID
	$provisorio.tipo_actualizacion 	= globals.z_conf_asiento_normal
	$provisorio.empresa				= globals.gUservID
	$provisorio.fecha 				= $rcd.fecha_mov
	$provisorio.texto 				= $texto + ' ' + $rcd.letra + '-'+$rcd.sucursal+'-'+$rcd.nro_factura + '  Cliente ' + $rcd.ctacte_cl_to_clientes_copia.razon_social    
	$provisorio.subdiario_id 		= 4  // egresos
	$provisorio.mes					= $rcd.fecha_mov.getMonth()+1
	$provisorio.anio				= $rcd.fecha_mov.getFullYear()
	$provisorio.tipo_asiento_id 	= $tipo_asiento
	
	globals.gtotal_asiento = null
	
	//ALTA de 4 RENGLONES (iva;importe;viaje tercero y/oviaje propio) Si alguno es cero de estos ultimos no genera renglon
	var letra
	var contra
	var error
	if ($rcd.ctacte_cl_to_tab_mov_cl_copia.d_h == 1)  // fc=1  nc=2 nd=1
	{   
		letra 	= 'D'
		contra 	= 'H'
	}
	else
	{
		letra 	= 'H'
		contra 	= 'D'
	}

	// DETALLE ASIENTO
	var det = $provisorio.asiento_prov_cab_to_asiento_prov_copia
	// ALTA IMPORTE
	if ($rcd.importe != 0)
	{
		det.newRecord()
		
		det.columna 	= letra
		det.cuentas_id = 999999
		if ($rcd.ctacte_cl_to_clientes_copia.getSize()>0) // verificar q existe la relacion
		{
			if ($rcd.ctacte_cl_to_clientes_copia.plancta_id == null) 
			{
				error = new Array(utils.dateFormat($rcd.fecha_mov,'dd-MM-yyyy'), $texto + ' ' + $rcd.letra + '-'+$rcd.sucursal+'-'+$rcd.nro_factura, 'Cliente ' + $rcd.ctacte_cl_to_clientes_copia.razon_social + ' no tiene cuenta asignada')
				$errores.addRow(error)    // se hace igual el asiento 
			} 
			else
				det.cuentas_id 	= $rcd.ctacte_cl_to_clientes_copia.plancta_id
		}
		else
		{// NO EXISTE relacion ctacte to clientes
			error = new Array(utils.dateFormat($rcd.fecha_mov,'dd-MM-yyyy'), $texto + ' ' + $rcd.letra + '-'+$rcd.sucursal+'-'+$rcd.nro_factura, 'Cliente ' + $rcd.ctacte_cl_to_clientes_copia.razon_social + ' no existe en tabla Clientes')
			$errores.addRow(error) // se hace igual el asiento 
		}
		
		det.importe 	= $rcd.importe
		det.numero		= 0
		det.empresa		= globals.gUservID
		det.centro		= 1
		det.division	= 1
		det.leyenda		= ''  
		det.mes			= $rcd.fecha_mov.getMonth()+1
		det.anio		= $rcd.fecha_mov.getFullYear()  
	}
	
	// ALTA IVA
	if ($rcd.iva != 0)
	{
		det.newRecord() 
		
		det.columna 	= contra
		det.cuentas_id 	= globals.zplan_iva_debf
		det.importe 	= $rcd.iva
		//det.numero		= $provisorio.numero  // da error=no se puede usar algo que todavia no fue guardado //Query failed: using db identity value from record that was not saved yet
		det.numero		= 0
		det.empresa		= globals.gUservID
		det.centro		= 1
		det.division	= 1
		det.leyenda		= ''
		det.mes			= $rcd.fecha_mov.getMonth()+1
		det.anio		= $rcd.fecha_mov.getFullYear()
	}

	// ALTA VIAJE TERCEROS
	if ($aux_viajes_terceros != 0)
	{
		det.newRecord()
		
		det.columna 	= contra
		if ($rcd.letra=='E')
			det.cuentas_id 	= globals.zplan_fletes_int_terc_vent;
		else
			det.cuentas_id 	= globals.zplan_fletes_nac_terc_vent;
		det.importe 	= $aux_viajes_terceros
		det.numero		= 0
		det.empresa		= globals.gUservID
		det.centro		= 1
		det.division	= 1
		det.leyenda		= ''
		det.mes			= $rcd.fecha_mov.getMonth()+1
		det.anio		= $rcd.fecha_mov.getFullYear()
	}
	// ALTA VIAJE PROPIO
	if ($aux_viajes_propios != 0)
	{	
		det.newRecord()
		
		det.columna 	= contra
		if ($rcd.letra=='E')
			det.cuentas_id 	= globals.zplan_fletes_int_prop_vent;
		else
			det.cuentas_id 	= globals.zplan_fletes_nac_prop_vent;
		det.importe 	= $aux_viajes_propios
 		det.numero		= 0
		det.empresa		= globals.gUservID
		det.centro		= 1
		det.division	= 1
		det.leyenda		= ''
		det.mes			= $rcd.fecha_mov.getMonth()+1
		det.anio		= $rcd.fecha_mov.getFullYear()

	}
	//  HABER = DEBE 
	// if($rcd.importe!= $rcd.iva + $aux_viajes_terceros + $aux_viajes_propios) // en Sybase da error de redondeo
	var auxiliar = $aux_viajes_terceros + $aux_viajes_propios + $rcd.iva
	if (Math.abs($rcd.importe - auxiliar) > 0.00999999999)  
	{
		error = new Array(utils.dateFormat($rcd.fecha_mov,'dd-MM-yyyy'),$texto + ' ' + $rcd.letra + '-'+$rcd.sucursal+'-'+$rcd.nro_factura, ' Debe distinto a haber')		
		$errores.addRow(error)
	} // igual se hace asiento
	else
		globals.gtotal_asiento = $rcd.importe
		
	$provisorio.total = globals.gtotal_asiento
}
